import '../mvp/model/node_bean.dart';

class TreeHelper<T> {

  /// 过滤出所有可见的Node
  List<NodeBean<T>> filterVisibleNode(List<NodeBean<T>> nodes,int visibleParentNodeIndex) {
    List<NodeBean<T>> result = [];
    NodeBean<T> currentNode = nodes[visibleParentNodeIndex];
    for (int index = 0 ; index < visibleParentNodeIndex + 1;index++){
      setNodeIcon(nodes[index]);
      result.add(nodes[index]);
    }

    if (currentNode.isExpand && (!currentNode.isLeaf())){
      currentNode.getChildren().forEach((node) {
        setNodeIcon(node);
        result.add(node);
      });
  }
    return result;
  }

  /// 把一个节点上的所有的内容都挂上去
  /// 通过递归的方式，把一个节点上的所有的子节点等都按顺序放入
  void convertTreeData2List(List<NodeBean<dynamic>> result, NodeBean<dynamic> node, int level,bool isAllShow) {
    node.setLevel(level);
    if (isAllShow){
      node.setExpand(true);
    }
    result.add(node);
    if (node.isLeaf()) {
      return;
    }
    for (int i = 0; i < node.getChildren().length; i++) {
      convertTreeData2List(result, node.getChildren()[i],node.getLevel() + 1, isAllShow);
    }
  }

  /// 设置节点的图标
  ///
  /// @param node
  void setNodeIcon(NodeBean<T> node) {
    if (node.getChildren().isNotEmpty && node.isExpand) {
      node.setIcon(node.iconExpand);
    } else if (node.getChildren().isNotEmpty && node.isExpand) {
      node.setIcon(node.iconCollapse);
    } else {
      node.setIcon(node.iconExpand);
    }
  }
}